<?php

// 初期設定
if (!defined("IN_APP")) {
	define("IN_APP", true);
	include_once("../../include/init.php");
	requireLogin();
}

//　タブ別の設定の読み込み
require_once("tab.include.php");

// ページ名
$page_name = "vote_show";

/******************* ページの処理　*******************/

class Vote {
	var $tweet, $alternatives, $votes, $name;
}

class Answer {
	var $twitter_username, $name, $icon, $vote, $tweet;
}

class NoAnswer {
	var $icon, $name, $twitter_username;
}

// 処理するツイートのidを読み込む
$tweet_id = trim(@$_GET["subpage"]);

require_once("../../include/Twitter/list_tweets.php");
require_once("../../include/Twitter/get_icons.php");

// データベースに接続する
$connect = connectToDb();

// グループの変数を読み込む
$group_id = $_SESSION['group'];
$group_name = getGroupName($connect, $group_id);

// リーダーのidを取得する
$leader_id = getLeaderId($connect, $group_id);

// リーダーのリストの本日のツイートを取得する
if (!($tweets = getTweetsUntilTweetId($leader_id, $group_name, $tweet_id))) {
	$page_name = "twitter_error";
}

// 履歴ページから来ていたら、前のページに表示する
if (@$_SESSION['page_history'])
	$parent_page = "履歴";
else
	$parent_page = "アンケート";

$vote_tweet = new Vote();
$votes_search = array();

$answers = array();
$no_answers = array();

$replies = array();

// 並び替えの関数
function sortAnswer($a, $b) {
	global $member_list;
	
	$a_sort = -1;$b_sort = -1;
	
	foreach ($member_list as $key => $value) {
		if ($value == $a->tweet->author_id)
			$a_sort = $key;
		else if ($value == $b->tweet->author_id)
			$b_sort = $key;
	}
			
	if ($a_sort == $b_sort) {
		return 0;
	}
	else {
		return $a_sort < $b_sort ? -1 : 1; 
	}
}

// 並び替えの関数
function sortNoAnswer($a, $b) {
	global $member_list;
	
	$a_sort = -1;$b_sort = -1;
	
	foreach ($member_list as $key => $value) {
		if ($value == $a->id)
			$a_sort = $key;
		else if ($value == $b->id)
			$b_sort = $key;
	}
			
	if ($a_sort == $b_sort) {
		return 0;
	}
	else {
		return $a_sort < $b_sort ? -1 : 1; 
	}
}

// ホワイトスペースを全部外して、小文字にする
function normalizeAlternative($str) {
	$tmp = $str;
	$str = normalizeJapaneseCharacters($str);
	$str = str_replace(array(" "), "", $str);
	$str = strtolower($str);

	return $str;
}

// 挙手ツイートを探す
foreach ($tweets as $tweet) {
	// メインツイートである場合
	if ($tweet->id == $tweet_id) {
		if (strpos($tweet->text, "【{$group_name}】【アンケート】") === 0) {
			$comment = str_replace("【{$group_name}】【アンケート】", "", $tweet->text);
			$comment = mb_trim(preg_replace("/「.*」/", "", $comment));
			$tweet->comment = $comment;
			
			$vote_tweet->tweet = $tweet;
		}
		else {
			$error = "表示しようとしていたページは無効です。";
			showErrorPage();
		}
		break;
	}
	//　メインツイートへの返信である場合
	else if ($tweet->replyTo == $tweet_id) {
		array_push($replies, $tweet);
	}
}

//　無効なページが指定された場合
if (empty($vote_tweet)) {
	$error = "表示しようとしていたページは無効です。";
	showErrorPage();
}
else {
	$vote_tweet->name = getUserName($connect, $group_id, $vote_tweet->tweet->author_id);
}

//　エラーが起こっていない場合
if (!$error) {

	$alternatives = array();
	
	$i = 0;
	
	while ($pos = strpos($vote_tweet->tweet->text, "「", $i)) {
		$i = $pos + 1;
		
		$pos_end = strpos($vote_tweet->tweet->text, "」", $i);
		
		$alternative = array();
		
		$alternative['name'] = mb_substr($tweet->text, $pos + 3, $pos_end - $pos - 3);
		$alternative['votes'] = 0;
		
		array_push($alternatives, $alternative);
	}
	
	// 挙手が投稿された時間を取得
	$timePerformed = $vote_tweet->tweet->date;

	$presentUsers = getPresentUsers($connect, $group_id, $timePerformed);
	
	$vote_tweet->alternatives = $alternatives;
	
	$votes = array();
	$total_votes = 0;

	foreach ($replies as $reply) {
		$already_exists = false;
		
		if (array_search($reply->author_id, $presentUsers) !== false) {
			// 既に配列に入っているかどうか検索する
			foreach ($answers as $answer) {
				if ($answer->tweet->author_id == $reply->author_id) {
					$already_exists = true;
				}
			}
			
			$reply->text = trim(preg_replace("/^@[a-zA-Z0-9]+( |　)/", "", $reply->text));
			
			// 存在していなかったら、投票を判断し、配列に追加する
			if (!$already_exists) {
				$chosen_alternative = false;
				$lowest_pos = 141; // ツイートの最高長さより高い数字
				
				//　最初に始まる選択肢を探す
				foreach ($vote_tweet->alternatives as $key => $alternative) {
					if (false !== $pos = strpos(normalizeAlternative($reply->text), normalizeAlternative($alternative['name']))) {
						
						if ($pos < $lowest_pos) {
							$chosen_alternative = $key;
							
							$lowest_pos = $pos;
						}
						else if ($pos == $lowest_pos) {
							if (mb_strlen($alternative['name']) > mb_strlen($vote_tweet->alternatives[$chosen_alternative]['name'])) {
								$chosen_alternative = $key;						
							}
						}
					}
				}
				
				// その選択肢を選ぶ
				if ($chosen_alternative !== false) {
					$answer = new Answer();
					
					$answer->tweet = $reply;
					$answer->twitter_username = $reply->author;
					$answer->name = getUserName($connect, $group_id, $reply->author_id);
					$answer->icon = $reply->icon;
					$answer->vote = $vote_tweet->alternatives[$chosen_alternative]['name'];
					
					$total_votes += 1;
					$vote_tweet->alternatives[$chosen_alternative]['votes'] += 1;
					
					array_push($answers, $answer);
				}
			}
		}
	}
	
	// 未回答者の配列を作成する
	$answered_users_ids = array();
	
	foreach ($presentUsers as $key => $user) {
		foreach ($answers as $answer) {
			if ($answer->tweet->author_id == $user) {
				array_push($answered_users_ids, $key);
				break;
			}
		}
	}
	
	$presentUsersWithoutAnswer = $presentUsers;
	foreach ($answered_users_ids as $id) {
		unset($presentUsersWithoutAnswer[$id]);
	}
	
	// 投稿していないユーザーのアイコンをツイッターから取得する
	if (!empty($presentUsersWithoutAnswer)) {
		$icons = getIcons($presentUsersWithoutAnswer);
		
		
		foreach ($presentUsersWithoutAnswer as $user) {
			$no_answer = new NoAnswer();
			$no_answer->icon = $icons[$user];
			$no_answer->twitter_username = getTwitterUsername($connect, $user);
			$no_answer->name = getUserName($connect, $group_id, $user);
			$no_answer->id = $user;
			
			if ($user != $vote_tweet->tweet->author_id)
				array_push($no_answers, $no_answer);
		}
	}
	
	//　並び替えに使われるグループ順を取得する
	$member_list = getGroupOrder($connect, $group_id);
	
	// 並び替えを行う
	usort($answers, "sortAnswer");
	usort($no_answers, "sortNoAnswer");
}

// データベースとの接続を切断する
mysql_close($connect);

/******************* 処理終了 *******************/

//　ページを表示する
$include_path = $SETTINGS['VIEW_PATH'] . $tab_name . "/" . $page_name . $SETTINGS['VIEW_NAME'];
include($include_path);

?>